package com.huishu.coupon.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.huishu.commons.pojo.Result;
import com.huishu.commons.pojo.dto.FindAvailableCouponDTO;
import com.huishu.commons.pojo.dto.SendRepurchaseDTO;
import com.huishu.commons.pojo.vo.CouponVO;
import com.huishu.coupon.pojo.dto.CouponCreateDTO;
import com.huishu.coupon.pojo.dto.CouponPageDTO;
import com.huishu.coupon.pojo.dto.CouponUpdateDTO;
import com.huishu.coupon.pojo.model.CouponDO;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 服务类
 * </p>
 *
 * @author generator@ljj
 * @since 2023-04-10
 */
public interface CouponService extends IService<CouponDO> {

    /* *//**
     * 根据商品id查询优惠卷
     * @param productId
     * @return
     *//*
    Result<List<CouponVO>> findCouponByProductId(Long productId);

    *//**
     * 根据品类查询优惠卷
     * @param productCategoryId
     * @return
     *//*
    Result<List<CouponVO>> findCouponByProductCategoryId(Long productCategoryId);*/

    /**
     * 查询可用的优惠卷
     *
     * @param findAvailableCouponDTO
     * @return
     */
    Result<List<CouponVO>> findAvailableCoupon(FindAvailableCouponDTO findAvailableCouponDTO);

    /**
     * 根据用户id查询用户领取的优惠卷（不包括复购卷）
     * @param userId
     * @return
     */
    Result<List<CouponVO>> findCouponByUserId(Long userId, List<Long> categoryId);

    /**
     * 查询待领取的优惠卷
     * @return
     */
    Result findUnclaimed();

    /**
     * 获取所有社区优惠卷
     * @return
     */
    Result findRepurchaseCoupon();

    /**
     * 分页查询
     * @param couponPageDTO
     * @return
     */
    Result pageList(CouponPageDTO couponPageDTO);

    /**
     * 根据id查询
     * @param id
     * @return
     */
    Result findById(Long id);

    /**
     * 新增优惠卷
     * @param couponCreateDTO
     * @return
     */
    Result create(CouponCreateDTO couponCreateDTO);

    /**
     * 修改
     * @param couponUpdateDTO
     * @return
     */
    Result modify(CouponUpdateDTO couponUpdateDTO);

    /**
     * 禁用或者取消禁用
     * @param couponUpdateDTO
     * @return
     */
    Result disableOrOpen(CouponUpdateDTO couponUpdateDTO);

    /**
     * 发放复购卷
     * @param sendRepurchaseDTO
     * @return
     */
    Result sendRepurchase(SendRepurchaseDTO sendRepurchaseDTO);

    /**
     * 查询用户的复购卷
     * @param userId
     * @param categoryId
     * @return
     */
    Result<List<CouponVO>> findRepurchaseByUserId(Long userId, List<Long> categoryId);

    /**
     * 删除复购卷
     * @param userId
     * @return
     */
    Result deleteRepurchase(Long userId);

    /**
     * 根据商品id查询绑定的优惠卷
     * @param id
     * @return
     */
    Result findRepurchaseCouponByProductId(Long id);

    /**
     * 根据样品id查询绑定的复购卷
     * @param ids
     * @return
     */
    Result<Map<Long, Boolean>> findRepurchaseByProductIds(List<Long> ids);
}
